package com.study.demo4;

import java.util.ArrayList;
import java.util.HashSet;

public class A02_HashSet {
    /*
    * 哈希值：
    *       对象的整数表达形式
    *       1.如果没有重写hashCode方法，计算出的哈希值是不同的
    *       2.如果已经重写hashCode方法，不同对象只要属性值相同，计算出的哈希值就是一样的
    *       3.但是在小部分情况下，不同的属性值或者不同的地址值计算出来的哈希值也有可能一样。（哈希碰撞）
    * */
    public static void main(String[] args) {
        // 创建对象
        // Student s1 = new Student("张三",23);
        // Student s2 = new Student("张三",23);
        // 如果没有重写hashCode方法，不同对象计算出来的哈希值是不同的
        // 如果已经重写hashCode方法，不同对象只要属性值相同，计算出的哈希值就是一样的
        // System.out.println(s1.hashCode());
        // System.out.println(s2.hashCode());
        
        // 但是在小部分情况下，不同的属性值或者不同的地址值计算出来的哈希值也有可能一样。（哈希碰撞）
        // System.out.println("abc".hashCode());
        // System.out.println("acD".hashCode());
        
        
        
        /*
        * HashSet集合去重
        *
        * 需求：
        *       创建一个存储学生对象的集合，存储多个学生对象。
        *       使用程序实现在控制台遍历改集合
        *       要求：学生对象的成员变量值相同，我们就可以认为是同一个对象。
        * */
        
        // 创建学生对象
        Student s1 = new Student("张三",23);
        Student s2 = new Student("李四",24);
        Student s3 = new Student("王五",25);
        Student s4 = new Student("张三",23);
        
        // 创建集合添加学生
        HashSet<Student> hs = new HashSet<>();
        System.out.println(hs.add(s1));
        System.out.println(hs.add(s2));
        System.out.println(hs.add(s3));
        System.out.println(hs.add(s4));
        System.out.println(hs);
    }
}
